package com.lzp.appexp

import kotlinx.coroutines.*

/**
 * @describe:
 * @Author: lixiaopeng
 * @Date: 12/18/20
 */
var acquired = 0

class Resource {
    init {
        acquired++
    } // Acquire the resource

    fun close() {
        acquired--
    } // Release the resource
}

/*fun main() {
    GlobalScope.launch { // 在后台启动一个新的协程并继续
        delay(1000L) // 非阻塞的等待 1 秒钟（默认时间单位是毫秒）
        println("World!") // 在延迟后打印输出
    }
    println("Hello,") // 协程已在等待时主线程还在继续
    runBlocking {
        delay(2000L)
    }// 阻塞主线程 2 秒钟来保证 JVM 存活
    println("done.")
}*/


/*
fun main() = runBlocking<Unit> { // 开始执行主协程
    GlobalScope.launch { // 在后台启动一个新的协程并继续
        delay(1000L)
        println("World!")
    }
    println("Hello,") // 主协程在这里会立即执行
    delay(2000L)      // 延迟 2 秒来保证 JVM 存活
    println("done.")
}
*/
/*

fun main() = runBlocking<Unit>  {
    val job = GlobalScope.launch { // 启动一个新协程并保持对这个作业的引用
        delay(500L)
        println("World!")
    }
    println("Hello,")
    job.join() // 等待直到子协程执行结束
    println("done.")
}*/


/*fun main() = runBlocking { // this: CoroutineScope
    launch { // 在 runBlocking 作用域中启动一个新协程
        println("111.")
        delay(1000L)
        println("World!")
    }
    coroutineScope{
        println("222222.")
    }
    println("Hello,")
}*/


/*
fun main() = runBlocking { // this: CoroutineScope
    launch {
        println("1111111111")
        delay(200L)
        println("Task from runBlocking")
    }

    coroutineScope { // 创建一个协程作用域
        println("2222222")
        launch {
            println("33333333")
            delay(100L)
            println("Task from nested launch")
        }

        delay(100L)
        println("Task from coroutine scope") // 这一行会在内嵌 launch 之前输出
    }

    println("Coroutine scope is over") // 这一行在内嵌 launch 执行完毕后才输出
}*/